//对于axios进行二次封装
import axios from "axios";
import store from '@/store'
import {getTimeStamp} from '@/utils/token'
import router from '@/router'
//引入进度条
const TimeOut=5


//axios.create方法执行,其实返回一个axios和request一样的
let requests = axios.create({
    //基础路径,发请求URL携带api【发现:真实服务器接口都携带/api】
    baseURL: "/mock",
    //超时的设置
    timeout: 5000
});

//请求拦截器:将来项目中【N个请求】，只要发请求,会触发请求拦截器!!!
requests.interceptors.request.use( async config => {
    //请求拦截器:请求头【header】,请求头能否给服务器携带参数
    //请求拦截器：其实项目中还有一个重要的作用,给服务器携带请求们的公共的参数
    //进度条开始
    if(store.state.user.token){
        config.headers.token = store.state.user.token;
        if (CheckIsTimeOut()) {
            //  继续？
            await store.dispatch('lgout')
            router.push('/login') // 跳到登录
            alert('token失效')
          }
    }
    return config;
});


//响应拦截器：请求数据返回会执行
requests.interceptors.response.use((res) => {
    //res:实质就是项目中发请求、服务器返回的数据
    //进度条结束
    
    return res.data;
}, (err) => {
    //温馨提示:某一天发请求,请求失败,请求失败的信息打印出来
    alert(err.message);
    //终止Promise链
    return new Promise();
});
function CheckIsTimeOut() {
    // 当前时间  - 存储的时间戳 > 时效性  false   tr
    return (Date.now() - getTimeStamp()) / 1000 > TimeOut
  }
//最后需要暴露:暴露的是添加新的功能的axios,即为requests
export default requests;




